package lock;

import java.util.concurrent.atomic.AtomicInteger;

/**
 *
 * 乐观锁
 *
 *      认为自己在使用数据时不会有别的线程修改数据，所以不会添加锁，只是在
 *      更新数据的时候去判断之前有没有别的线程更新了这个数据
 *
 *      乐观锁适合读操作多的场景，不加锁的特点能够使其读操作的性能大幅提升。
 *
 *      采用CAS（Compare And Swap）算法实现
 *
 *
 * @author Caleb
 * @date 2021/3/19 12:09
 * @description
 */
public class OptimisticLock {

    private static AtomicInteger  count = new AtomicInteger(0);

    private static CASTest casTest = new CASTest();

    public static void main(String[] args) {
        // 创建两个线程
        for (int i = 0; i < 2; i++) {
            new Thread(() -> {
                try {
                    Thread.sleep(10);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //每个线程让count自增100次
                for (int k = 0; k < 100; k++) {
//                    casTest.incrementAndGet();
                }
            }).start();
        }

        try{
            Thread.sleep(2000);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(count);
    }


}
